Controllo di posizione sul controllore con SM_Drive_PosControl
Vedi il PosControl.project
progetto di esempio nella directory di installazione di CODESYS sotto ..\CODESYS SoftMotion\Examples
.
Nella maggior parte dei casi, un servocontrollo assume il controllo della posizione dell'azionamento, nonché il controllo della potenza e il controllo della velocità di rotazione. Tuttavia, esistono casi d'uso in cui il controllore assume il controllo della posizione dell'asse. Questo esempio mostra come un dispositivo controllato in velocità (ad esempio un convertitore di frequenza con feedback di posizione) è controllato in posizione da CODESYS SoftMotion.
Il requisito è un dispositivo che è controllato dalla velocità impostata e restituisce la sua posizione attuale. In questo esempio, viene utilizzato un terminale di uscita analogica a 10 V EL4031 con un segnale utilizzato come setpoint di velocità per un convertitore di frequenza. Un terminale dell'encoder EL5101 viene utilizzato per il feedback di posizione.
Controllare la posizione dell'asse con SM_Drive_PosControl
Aggiungere un asse controllato in posizione di tipo
SM_Drive_PosControl
sotto Pool di assi generali SoftMotion nell'albero dei dispositivi.Aggiungere i terminali per il terminale analogico (EL4031) e l'encoder (EL5101) all'albero dei dispositivi.
Albero dei dispositivi:
Suggerimento
Le descrizioni dei dispositivi del bus di campo devono essere scaricate e installate dal produttore.
Apri il
SM_Drive_PosControl
dispositivo nell'editor e specificare il parametro generale Modulo con valore360.0
sul Generale scheda.Clicca il Ridimensionamento/Mappatura scheda. Il numero di incrementi per giro motore è ricavato dalla scheda tecnica dell'encoder. In questo esempio,
4096
gli incrementi (1) sono di un giro del motore. Poiché stai lavorando con gradi angolari nell'applicazione, specifichi il valore360
(2) per unità in applicazione.Impostazioni:
Passa a Azionamento SoftMotion: anello di controllo della posizione scheda e specificare i seguenti parametri:
D 2.0
Il tempo morto determina il numero di cicli in cui la posizione effettiva ricevuta (encoder) viene sfasata alla posizione impostata dell'asse. Il tempo morto dipende dai componenti applicati e deve essere determinato per tentativi ed errori.
Kp 0.0
La costante di proporzionalità è il fattore per il quale viene moltiplicato l'errore di posizione (lo scostamento tra posizione impostata e posizione effettiva) da sommare successivamente alla velocità impostata. Ora imposta questo valore su
0
. Il valore verrà determinato sperimentalmente in un secondo momento.Bit width: 16
La larghezza di bit del valore effettivo viene ricevuta a seconda dei componenti utilizzati e può essere impostata come valori a 16, 24 o 32 bit. Imposta il valore su
16
perché i componenti utilizzati danno la posizione comeUINT
.max
Lasciare spento l'interruttore di monitoraggio dell'errore di posizione. Se necessario, puoi riaccenderlo. Selezionare la casella di controllo e specificare un ritardo massimo consentito. Se questo valore viene superato durante il funzionamento, l'asse entra in uno stato di errore.
δ/δt
Il parametro ha il valore 1 e va modificato solo in casi molto particolari. Definisce il rapporto tra la velocità impostata e la derivazione della posizione. L'intervallo di valori va da 0 a 1:
0
: Il valore difSetVelocity
viene utilizzato come fonte.1
: Come sorgente viene utilizzata la derivazione numerica della posizione impostata.
Ciclo di controllo:
Ora si impostano i valori di velocità che vengono inviati all'attuatore. A tal fine è necessario conoscere la velocità massima in unità applicative e il corrispondente valore grezzo dei dati trasferiti. In questo esempio, la velocità massima è raggiunta dall'uscita del valore
16#7FFF
, che corrisponde a una velocità di 10 giri al secondo. Questo corrisponde anche a 3600 gradi al secondo secondo le impostazioni.Impostazioni:
Mappatura delle variabili su input e output
Mappare le variabili con i dati dell'asse sui moduli I/O. I dati ciclici disponibili dell'asse si trovano nelle strutture dati in
e out
. È possibile stabilire questa connessione nell'editor del dispositivo del dispositivo di input e output in modo programmatico o direttamente.
Collegare l'uscita (velocità impostata) al dispositivo EL4031. Apri il dispositivo nell'editor e fai clic su Mappatura I/O EtherCAT scheda. Assegna la variabile
out.iSetVelocity
dell'asse all'uscita. Nel caso di un'uscita a 32 bit,out.diSetVelocity
viene utilizzato.Mappatura:
Procedere allo stesso modo con l'inserimento della posizione. Aprire il dispositivo EL5101 nell'editor e impostare il valore di input della posizione su
in.wActPosition
. Per un ingresso a 32 bit, impostare il valore suin.dwActPosition
. Mappatura:Affinché l'abilitazione del controllo, l'arresto rapido e l'interruttore di fine corsa funzionino, gli ingressi corrispondenti di
SMC_PosControlInput
devono essere definiti dai valori dell'azionamento. Le uscite diSMC_PosControlOutput
devono essere trasmessi all'azionamento (vedi descrizione sotto). Se l'unità non supporta l'arresto rapido, ad esempio, alloraSM_Drive_PosControl.in.bDriveStartRealState := TRUE
deve essere impostato eSM_Drive_PosControl.out.bDriveStart
può essere ignorato. In questo esempio,bDriveStartRealState
ebRegulatorRealState
devono essere impostati nell'applicazione.
SM_Drive_PosControl.in.bDriveStartRealState := TRUE; SM_Drive_PosControl.in.bRegulatorRealState := TRUE;
Determinazione dei tempi morti del sistema
Ora imposta la modalità online con l'asse e imposta i parametri di controllo.
Importante
Notare che l'asse potrebbe spostarsi fuori controllo. Pertanto è necessario prendere le dovute precauzioni di sicurezza.
Quindi provare a far funzionare l'asse senza controllo di posizione.fKp
è già impostato su 0.0 e le impostazioni di ridimensionamento sono verificate. Cambia l'asse su MC_Power
e inizia MC_MoveVelocity
. L'asse si muove ora con la velocità programmata di 1 U/s. In caso di deviazioni, è necessario correggere la scala di conseguenza.
Termina il movimento, ad esempio con
MC_MoveRelative
e avviare la funzione di traccia.Determina il tempo morto del sistema misurando la differenza di tempo tra la posizione impostata e la posizione effettiva.
In
MC_MoveRelative
, impostare la velocità massima e una grande accelerazione. Avviare la traccia di campionamento conMC_MoveRelative
. Determinare ora la differenza di tempo tra il movimento iniziale della posizione impostata e la prima reazione della posizione effettiva.Traccia:
Per determinare il tempo morto
D
, dividi questa differenza di tempo per il tempo di ciclo (D = differenza di tempo/tempo di ciclo). SoftMotion Drive: controllo della posizione scheda, specificare questo valore nel ciclo di controllo inD
.Ora cercate di determinare l'impostazione corretta per
fKp
. A tale scopo, modificate il valore della variabile<drive>.controller.fKp
in un elenco di controllo.Set
fKp
a un numero piccolo (ad esempio 0,0001) e aumenta il valore passo dopo passo. Controlla il comportamento di ogni modifica con la traccia di campionamento. Non appena si rilevano delle fluttuazioni, il limite massimo è stato raggiunto. Ora riduci il valore difKp
di circa il 10% e specificarlo sul SoftMotion Drive: controllo della posizione scheda nel circuito di controllo inKp
.Ora puoi usare l'asse.
Modulo funzionale SMC_PosControlInput
Biblioteca: SM3_Drive_PosControl
Nome | Tipo di dati | Valore iniziale | Descrizione |
---|---|---|---|
|
| Finecorsa in direzione positiva (solo per assi finiti) Dal SoftMotion versione 4.12.0.0, il monitoraggio dei finecorsa è abilitato per impostazione predefinita. Per le versioni precedenti, questo deve essere abilitato manualmente impostando
| |
|
| Finecorsa in direzione negativa
| |
|
| Posizione attuale (posizione effettiva) come valore a 16 bit | |
|
| Posizione attuale (posizione effettiva) come valore a 32 bit | |
|
| Errore esterno | |
|
|
| |
|
|
| |
|
|
| |
|
|
Caso d'uso: il valore è mantenuto a |
Modulo funzionale SMC_PosControlOutput
Biblioteca: SM3_Drive_PosControl
Nome | Tipo di dati | Valore iniziale | Descrizione |
---|---|---|---|
|
|
| |
|
|
| |
|
| Imposta velocità | |
|
| Imposta velocità |
Blocco funzione SMC_SetPosControlParams
Biblioteca: SM3_Drive_PosControl
Modifica i parametri di an SM3_Drive_PosControl
asse
Nome | Tipo di dati | Valore iniziale | Descrizione |
---|---|---|---|
|
| Riferimento dell'asse | |
|
|
| |
|
| -1 | Guadagno proporzionale per lag Un valore inferiore a 0 viene ignorato. |
|
| -1 | Fattore per il controllo della velocità con 0: Nessun controllo pilota di velocità; 1: Uscita diretta di |
|
| -1 | Ritardo di tempo nei cicli tra Questo valore non deve essere 0. Un valore inferiore a 0 viene ignorato. |
|
| -1 | Ritardo di posizione massimo 0 disattiva il controllo del massimo ritardo di posizione. Un valore inferiore a 0 viene ignorato. |
Nome | Tipo di dati | Valore iniziale | Descrizione |
---|---|---|---|
|
| L'esecuzione del blocco funzione è stata terminata. | |
|
|
| |
|
| Identificazione dell'errore |
I parametri dell'azionamento dell'asse SM_Drive_PosControl
sono impostati.
PROGRAM PLC_PRG VAR fbSetPosControlParams : SMC_SetPosControlParams; END_VAR fbSetPosControlParams.fKp := 1; fbSetPosControlParams.fPartVelPilotControl :=0; fbSetPosControlParams.fDeadTime :=0.1; fbSetPosControlParams.fMaxPositionDiff :=1; fbSetPosControlParams(Axis:= SM_Drive_PosControl, bExecute:= TRUE);